//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "uExportEcr.h"
//---------------------------------------------------------------------------
#define MODULE_TAG 1300
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CBitBtn"
#pragma link "CEdit"
#pragma link "CMemo"
#pragma link "CSpeedBtn"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
void __fastcall ExportEcriture(CTable *pTblHITmpExport)
{
  TfExportEcr *fExportEcr = NULL;
  try
  {
    fExportEcr = new TfExportEcr(NULL,pTblHITmpExport);
    fExportEcr->ShowModal();
  }
  catch(Exception &e)
  {
    EICDisplayException(TAGL,e);
  }
  delete fExportEcr;
}
//---------------------------------------------------------------------------
__fastcall TfExportEcr::TfExportEcr(TComponent* Owner,CTable *pTblHITmpExport) : CEICForm(Owner)
{
  try
  {
    ASSERT(pTblHITmpExport && pTblHITmpExport->Active);
    m_TblHITmpExport = pTblHITmpExport;
  }
  catch(Exception &e)
  {
    EICDisplayException(TAGL,e);
  }
}
//---------------------------------------------------------------------------
CEICForm *__export TfExportEcr::CreateInstance(TComponent *Owner)
{
  try { return new TfExportEcr(Owner,NULL); }
  catch (...) { return NULL; }
}
//---------------------------------------------------------------------------
void __fastcall TfExportEcr::CSpeedButton1Click(TObject *Sender)
{
  try
  {
    if(SaveDialog1->Execute())
      eFichier->Text = SaveDialog1->FileName;
  }
  catch(Exception &e)
  {
    EICDisplayException(TAGL,e);
  }
}
//---------------------------------------------------------------------------
void __fastcall TfExportEcr::bExporterClick(TObject *Sender)
{
  bool bOuvrirFichierApresCreation;
  try
  {
    if(eFichier->Text.IsEmpty())
    {
      EICAttention("Aucun fichier n'est renseigné.");
      eFichier->SetFocus();
      return;
    }
    if(FileExists(eFichier->Text))
    {
      if(EICQuestion("Le fichier à exporter existe déjà.\nSouhaitez-vous l'écraser ?","Exportation",MB_DEFBUTTON2))
        DeleteFile(eFichier->Text);
      else
      {
        eFichier->SetFocus();
        return;
      }
    }
    //Proposer d'ouvrir le fichier d'export
    bOuvrirFichierApresCreation = EICQuestion("Voulez-vous ouvrir le fichier après création ?","Question");
    if(Exporter())
    {
      if(bOuvrirFichierApresCreation)
        ShellExecute(Application->Handle,"open",(eFichier->Text).c_str(),NULL,NULL,SW_SHOWNORMAL);
      Close();
    }
  }
  catch(Exception &e)
  {
    EICDisplayException(TAGL,e);
  }
}
//---------------------------------------------------------------------------
bool __fastcall TfExportEcr::Exporter(void)
{
  bool             bResultat = false;
  CBarre           Barre;
  CTextFileStream *f;
  TDateTimeField  *fDateOpe = NULL;
  TStringField    *fCodeJnl = NULL, *fPiece = NULL, *fCompte = NULL, *fLibelleOpe = NULL;
  TCurrencyField  *fDebit = NULL, *fCredit = NULL;
  AnsiString       asChaine;
  try
  {
    Barre.Messages = "Exportation des données";
    Barre.Titre    = "Exportation";
    Barre.Open();
    Barre.Max = m_TblHITmpExport->RecordCount + 1;
    try
    {
      f = new CTextFileStream(eFichier->Text,fmCreate | fmShareExclusive);
    }
    catch (EFCreateError &e)
    {
      EICErreur("Impossible de créer le fichier  '"+ eFichier->Text + "'");
      return false;
    }
    Barre++;
    //Création du fichier d'export
    f->WriteLine("Date;Journal;Référence pièce;Compte;Libellé d'opération;Montant Débit;Montant Crédit");
    fDateOpe    = (TDateTimeField*)m_TblHITmpExport->FieldByName("DateOpe");
    fCodeJnl    = (TStringField  *)m_TblHITmpExport->FieldByName("CodeJnl");
    fPiece      = (TStringField  *)m_TblHITmpExport->FieldByName("Piece");
    fCompte     = (TStringField  *)m_TblHITmpExport->FieldByName("Compte");
    fLibelleOpe = (TStringField  *)m_TblHITmpExport->FieldByName("LibelleOpe");
    fDebit      = (TCurrencyField*)m_TblHITmpExport->FieldByName("Debit");
    fCredit     = (TCurrencyField*)m_TblHITmpExport->FieldByName("Credit");
    SCAN_TABLE(m_TblHITmpExport)
    {
      asChaine.printf("%s;%s;%s;%s;%s;%.2f;%.2f",
                    (fDateOpe->AsDateTime).FormatString("dd/mm/yyyy").c_str(), //Date d'opération
                    (fCodeJnl->AsString).c_str(),                              //Code journal
                    (fPiece->AsString).c_str(),                                //Pièce interne
                    (fCompte->AsString).c_str(),                               //Numéro de compte
                    (fLibelleOpe->AsString).c_str(),                           //Libellé d'opération
                    fDebit->AsFloat,                                           //Montant Débit
                    fCredit->AsFloat);                                         //Montant Crédit
      f->WriteLine(asChaine);
      Barre++;
    }
    bResultat = true;
    Barre.Close();
  }
  catch (Exception &e)
  {
    EICDisplayException(TAGL,e);
    bResultat = false;
  }
  delete f;
  return bResultat;
}
//---------------------------------------------------------------------------

